﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace BudjetProjekat
{
    public partial class FormGlavna : Form
    {
        //KalendarKolona datum;
        bool dugmeNovaGrupa = false;
        bool dugmeNovaKategorija = false;
        SqlConnection konekcija;
        int brRedova;
        int noviBrRedova;

        SqlCommand sCommand;
        SqlDataAdapter sAdapter;
        SqlCommandBuilder sBuilder;
        DataSet sDs;
        DataTable sTable;

      

        int FK_ID_Kategorija_index;

        public FormGlavna()
        {
            InitializeComponent();

            tVGrupeIKategorije.ShowNodeToolTips = false;            
            
            btnBrisi.Enabled = true;

            Inicijalizacija();
                   // pNovaGrupa.Hide();
                   // pKategorija.Hide();
                    btnNovaKategorija.Enabled = false;
                    RefreshBojuTabele();
                    tVGrupeIKategorije.SelectedNode = tVGrupeIKategorije.Nodes[0];

          
        }

        private void Inicijalizacija()
        {
            //KONEKCIJA NA BAZU------------- 
            konekcija = new SqlConnection();
            konekcija.ConnectionString = "Data Source=.\\sqlexpress;Initial Catalog=BudjetDB;Integrated Security=True;MultipleActiveResultSets=true;";
            konekcija.Open();
            //------------------------------
            //Popunjavanje treeview-a grupama iz baze
            SqlDataAdapter da = new SqlDataAdapter("select naziv from grupa", konekcija);
            DataSet ds1 = new DataSet();
            da.Fill(ds1);
            for (int i = 0; i < ds1.Tables[0].Rows.Count; i++)
                tVGrupeIKategorije.Nodes.Add(ds1.Tables[0].Rows[i].ItemArray.GetValue(0).ToString());
            //----------------------------------------

            for (int j = 0; j < tVGrupeIKategorije.Nodes.Count; j++)
            {
                if (tVGrupeIKategorije.Nodes[0].Level == 0)
                {
                    SqlDataAdapter da1 = new SqlDataAdapter("select kategorija.Naziv from kategorija,grupa where kategorija.FK_ID_Grupa = Grupa.ID and grupa.Naziv = \'" + tVGrupeIKategorije.Nodes[j].Text + "\'", konekcija);
                    DataSet ds2 = new DataSet();
                    da1.Fill(ds2);
                    for (int i = 0; i < ds2.Tables[0].Rows.Count; i++)
                        tVGrupeIKategorije.Nodes[j].Nodes.Add(ds2.Tables[0].Rows[i].ItemArray.GetValue(0).ToString());

                }
            }
        }
        private void selektCvora(String naziv)
        {
          
            int level = tVGrupeIKategorije.SelectedNode.Level;
            if (level == 0)
            {
                SqlCommand cmd4 = new SqlCommand("sp_Transakcija_SELECT_PoGrupi", konekcija);
                cmd4.CommandType = CommandType.StoredProcedure;
                cmd4.Parameters.Add(new SqlParameter("@grupa", tVGrupeIKategorije.SelectedNode.Text));
                
                SqlDataReader reader = cmd4.ExecuteReader();
                DataSet ds = new DataSet();
                DataTable dt = new DataTable();
                ds.Tables.Add(dt);
                ds.Load(reader, LoadOption.PreserveChanges, ds.Tables[0]);
                dgvPrikaz.DataSource = ds.Tables[0];
                dgvPrikaz.ReadOnly = true;
                dgvPrikaz.Columns[0].Visible = false;
            }
            else{
                dgvPrikaz.ReadOnly = true;

                SqlCommand cmd1 = new SqlCommand("sp_Transakcija_SELECT_PoKategoriji", konekcija);
                cmd1.CommandType = CommandType.StoredProcedure;
                cmd1.Parameters.Add(new SqlParameter("@kategorija", tVGrupeIKategorije.SelectedNode.Text));

                SqlDataReader reader = cmd1.ExecuteReader();
                DataSet ds = new DataSet();
                DataTable dt = new DataTable();
                ds.Tables.Add(dt);
                ds.Load(reader, LoadOption.PreserveChanges, ds.Tables[0]);
                dgvPrikaz.DataSource = ds.Tables[0];


                dgvPrikaz.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                dgvPrikaz.Columns[0].Visible = false;
                
            }

        }

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            btnBrisi.Enabled=true;
            selektCvora(tVGrupeIKategorije.SelectedNode.Text);
            //test da li je cvor root
            int level = tVGrupeIKategorije.SelectedNode.Level;
            if (level == 0)
            {
                btnNovaKategorija.Enabled = true;
                pKategorija.Visible = true;
            }
            else
            {
                btnNovaKategorija.Enabled = false;
                pKategorija.Visible = false;

            }
            //Računanje FK_ID_Kategorija za zadnju funkciju
            string sql1 = "select ID from Kategorija where Naziv = \'" + tVGrupeIKategorije.SelectedNode.Text + "\'";
            //string sql2 = select FK_ID_TIp from transakcija where FK_ID_TIp = (select ID from Tip_Transakcije where Naziv = 'Pravi');
            //string sql3 = "select FK_ID_Kategorija from transakcija where FK_ID_Kategorija = (select ID from Kategorija where Naziv = \'" + treeView1.SelectedNode.Text + "\')";
            sCommand = new SqlCommand(sql1, konekcija);
            //-------
            FK_ID_Kategorija_index = Convert.ToInt32(sCommand.ExecuteScalar());
            Console.WriteLine(sCommand.ExecuteScalar());

            dgvPrikaz.Update();

        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (!dugmeNovaGrupa)
            {
                pNovaGrupa.Show();
                dugmeNovaGrupa = true;
            }
            else
            {
                dugmeNovaGrupa = false;
                pNovaGrupa.Hide();
            }
            txtNaslovGrupe.Clear();
            pKategorija.Hide();
            dugmeNovaKategorija = false;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            String naslov = txtNaslovGrupe.Text;
            if (!naslov.Equals(""))
            {
                TreeNode newNode = new TreeNode(naslov);
                // treeView1.SelectedNode.Nodes.Add(newNode);
                tVGrupeIKategorije.Nodes.Add(newNode);
                //pNovaGrupa.Hide();
                dugmeNovaGrupa = false;
            }

            DodajNovuGrupu();

            txtNaslovGrupe.Clear();
        }

        private void DodajNovuGrupu()
        {
            //BAZA
            SqlCommand cmdIns = new SqlCommand("sp_Grupa_INSERT", konekcija);
            cmdIns.CommandType = CommandType.StoredProcedure;
            cmdIns.Parameters.Add(new SqlParameter("@naziv", txtNaslovGrupe.Text));
            cmdIns.ExecuteReader();
        }

        private void btnNovaKategorija_Click(object sender, EventArgs e)
        {
            if (!dugmeNovaKategorija)
            {
                pKategorija.Show();
                dugmeNovaKategorija = true;
            }
            else
            {
                dugmeNovaKategorija = false;
                pKategorija.Hide();
            }
            txtNovaKategorija.Clear();
            pNovaGrupa.Hide();
            dugmeNovaGrupa = false;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            String naslov = txtNovaKategorija.Text;
            if (!naslov.Equals(""))
            {
                TreeNode newNode = new TreeNode(naslov);
                tVGrupeIKategorije.SelectedNode.Nodes.Add(newNode);
                //pKategorija.Hide();
                dugmeNovaKategorija = false;
                tVGrupeIKategorije.SelectedNode.Expand();
            }

            DodajNovuKategoriju();
           
            txtNovaKategorija.Clear();
        }

        private void DodajNovuKategoriju()
        {
            //BAZA
            String s = "INSERT INTO Kategorija (Naziv, FK_ID_Grupa) select" + "\'" + txtNovaKategorija.Text + "\'" + ", Grupa.ID from Grupa where Grupa.Naziv =" + "\'" + tVGrupeIKategorije.SelectedNode.Text + "\'";

            sCommand = new SqlCommand(s, konekcija);
            sCommand.ExecuteScalar();
        }

        private void RefreshBojuTabele()
        {
            int brRedova = dgvPrikaz.Rows.Count;
            DataGridViewRow theRow;
            for (int i = 1; i < brRedova; i++)
            {
                theRow = dgvPrikaz.Rows[i];
                if (i % 2 != 0)
                    theRow.DefaultCellStyle.BackColor = Color.Beige;
            }
  
        }

        private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            RefreshBojuTabele();
        }

        private void Form1_Leave(object sender, EventArgs e)
        {
            
            konekcija.Close();
        }

     
        private void button5_Click(object sender, EventArgs e)
        {
            
            dgvPrikaz.ReadOnly = false;

            delete_btn.Enabled = false;
        
        }

        private void delete_btn_Click(object sender, EventArgs e)
        {
            if (dgvPrikaz.SelectedRows.Count > 0)
            {
                if (MessageBox.Show("Da li zaista želite obrisati transakciju!!!", "Brisanje", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    Brisanje();
                    dgvPrikaz.Update();
                }
                
            }
        }

        private void Brisanje()
        {
            int id = (int)dgvPrikaz.SelectedRows[0].Cells[0].Value;


            //poziv procedure
            SqlCommand cmdIns = new SqlCommand("sp_Transakcija_DELETE", konekcija);
            cmdIns.CommandType = CommandType.StoredProcedure;
            cmdIns.Parameters.Add(new SqlParameter("@id", id));
            cmdIns.ExecuteReader();
        }

        private void save_btn_Click(object sender, EventArgs e)
        {

            int index;
            if (sTable != null)
                index = sTable.Rows.Count - 1;
            else
                index = -1;

            if (sTable != null && index != -1)
            {
                sTable.Rows[index]["FK_ID_Korisnik"] = 3; //Fiksno jer nemamo te komponente u sistemu još uvijek!!!


                sTable.Rows[index]["FK_ID_Kategorija"] = FK_ID_Kategorija_index;
                //sTable.Rows[index]["FK_ID_TIp"] = 1; //Nek bude fiksno
                //sTable.Rows[index]["FK_ID_Vrsta"] = 1; //Nek bude fiksno

                sAdapter.Update(sTable);
            }
            dgvPrikaz.ReadOnly = true;

            delete_btn.Enabled = true;
        }

        private void btnBrisi_Click(object sender, EventArgs e)
        {
            
            int level = tVGrupeIKategorije.SelectedNode.Level;
            if (level == 0)
            {
                brisanjegrupe();
            }
            else
            {
                brisanjekategorije();
            }

            if (tVGrupeIKategorije.Nodes.Count == 0)
            {
                btnBrisi.Enabled = false;
                dgvPrikaz.DataSource = null;
            }
        }

        private void brisanjekategorije()
        {
            //Brisanje kategorije
            string sql1 = "delete from Transakcija where FK_ID_Kategorija = (select id from Kategorija where Naziv = \'" + tVGrupeIKategorije.SelectedNode.Text + "\')";
            string sql = "delete from Kategorija where Naziv = \'" + tVGrupeIKategorije.SelectedNode.Text + "\'";
            sCommand = new SqlCommand(sql1, konekcija);
            sCommand.ExecuteScalar();
            sCommand = new SqlCommand(sql, konekcija);
            sCommand.ExecuteScalar();
            tVGrupeIKategorije.SelectedNode.Remove();
            dgvPrikaz.Refresh();
        }

        private void brisanjegrupe()
        {
            string sql0 = "delete from Transakcija where FK_ID_Kategorija in (select id from Kategorija where FK_ID_Grupa = (select ID from Grupa where Naziv = \'" + tVGrupeIKategorije.SelectedNode.Text + "\'))";
            string sql1 = "delete from Grupa where Naziv =  \'" + tVGrupeIKategorije.SelectedNode.Text + "\'";
            string sql = "delete from Kategorija where FK_ID_Grupa = (select ID from Grupa where Naziv = \'" + tVGrupeIKategorije.SelectedNode.Text + "\')";
            sCommand = new SqlCommand(sql0, konekcija);
            sCommand.ExecuteScalar();
            sCommand = new SqlCommand(sql, konekcija);
            sCommand.ExecuteScalar();
            sCommand = new SqlCommand(sql1, konekcija);
            sCommand.ExecuteScalar();
            tVGrupeIKategorije.SelectedNode.Remove();
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            FormNovaTransakcija v = new FormNovaTransakcija();
            v.Show();
        }

        private void btnIzmjeniTransakciju_Click(object sender, EventArgs e)
        {
            string vrati_Datum = "SELECT Datum FROM Transakcija WHERE ID = \'" + 6 + "\'";

            SqlCommand sCommand = new SqlCommand();

            sCommand = new SqlCommand(vrati_Datum, konekcija);
            DateTime datum = Convert.ToDateTime(sCommand.ExecuteScalar());


            FormEditujTransakciju v = new FormEditujTransakciju();
            v.Show();
            //DateTime datum = Convert.ToDateTime(vrati_Datum);
            v.Postavi_Vrijednosti(datum, "grupa", "kategorija", "vrsta", 100, true, "Ovo je test");
        }
    }
}

